Notify ATK_STATE_ENABLED change when ATK_STATE_SENSITIVE changes if necessary.
authorMike Gorse <mgorse@novell.com>
Thu, 22 Apr 2010 04:24:41 +0000 (12:24 +0800)
committerLi Yuan <li.yuan@sun.com>
Thu, 22 Apr 2010 04:24:41 +0000 (12:24 +0800)
Bug #615999.

modules/other/gail/gailcheckmenuitem.c
modules/other/gail/gailchecksubmenuitem.c
modules/other/gail/gailtogglebutton.c
modules/other/gail/gailwidget.c

index 45c3c5b78627346a7522a9b09cb6342af009cf1b..e203e189c7f9dffe9bace3c4d3dfd9018ff03af5 100644 (file)
@@ -138,7 +138,19 @@ gail_check_menu_item_real_notify_gtk (GObject           *obj,
 
   if (strcmp (pspec->name, "inconsistent") == 0)
     atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED,
-                       !gtk_check_menu_item_get_inconsistent (check_menu_item));
+                       (gtk_widget_get_sensitive (GTK_WIDGET (check_menu_item)) &&
+                        !gtk_check_menu_item_get_inconsistent (check_menu_item)));
+  else if (strcmp (pspec->name, "sensitive") == 0)
+    {
+      /* Need to override gailwidget behavior of notifying for ENABLED */
+      gboolean sensitive;
+      gboolean enabled;
+      sensitive = gtk_widget_get_sensitive (GTK_WIDGET (check_menu_item));
+      enabled = sensitive &&
+                !gtk_check_menu_item_get_inconsistent (check_menu_item);
+    atk_object_notify_state_change (atk_obj, ATK_STATE_SENSITIVE, sensitive);
+    atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, enabled);
+    }
   else
     GAIL_WIDGET_CLASS (gail_check_menu_item_parent_class)->notify_gtk (obj, pspec);
 }
index fe400d79b9559015dba8c1c89d448be05ed98af0..d643268c9a485878cd4cb05c621429ab99d1c053 100644 (file)
@@ -135,7 +135,19 @@ gail_check_sub_menu_item_real_notify_gtk (GObject           *obj,
 
   if (strcmp (pspec->name, "inconsistent") == 0)
     atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED,
-                       !gtk_check_menu_item_get_inconsistent (check_menu_item));
+                       (gtk_widget_get_sensitive (GTK_WIDGET (check_menu_item)) &&
+                        !gtk_check_menu_item_get_inconsistent (check_menu_item)));
+  else if (strcmp (pspec->name, "sensitive") == 0)
+    {
+      /* Need to override gailwidget behavior of notifying for ENABLED */
+      gboolean sensitive;
+      gboolean enabled;
+      sensitive = gtk_widget_get_sensitive (GTK_WIDGET (check_menu_item));
+      enabled = sensitive &&
+                !gtk_check_menu_item_get_inconsistent (check_menu_item);
+    atk_object_notify_state_change (atk_obj, ATK_STATE_SENSITIVE, sensitive);
+    atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, enabled);
+    }
   else
     GAIL_WIDGET_CLASS (gail_check_sub_menu_item_parent_class)->notify_gtk (obj, pspec);
 }
index beed9a83096c2c4a713b784e2485c9fcae13610e..94f9f59658631a666915f929f09d8ae721daf4a4 100644 (file)
@@ -122,7 +122,19 @@ gail_toggle_button_real_notify_gtk (GObject           *obj,
 
   if (strcmp (pspec->name, "inconsistent") == 0)
     atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED,
-                       !gtk_toggle_button_get_inconsistent (toggle_button));
+                       (gtk_widget_get_sensitive (GTK_WIDGET (toggle_button)) &&
+                        !gtk_toggle_button_get_inconsistent (toggle_button)));
+  else if (strcmp (pspec->name, "sensitive") == 0)
+    {
+      /* Need to override gailwidget behavior of notifying for ENABLED */
+      gboolean sensitive;
+      gboolean enabled;
+      sensitive = gtk_widget_get_sensitive (GTK_WIDGET (toggle_button));
+      enabled = sensitive &&
+                !gtk_toggle_button_get_inconsistent (toggle_button);
+    atk_object_notify_state_change (atk_obj, ATK_STATE_SENSITIVE, sensitive);
+    atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, enabled);
+    }
   else
     GAIL_WIDGET_CLASS (gail_toggle_button_parent_class)->notify_gtk (obj, pspec);
 }
index 4d550f0ea7848874f1969086b8ed3554a357cba1..4bd31ddf5a79759febf69695f83543f4d718e425 100644 (file)
@@ -997,6 +997,9 @@ gail_widget_real_notify_gtk (GObject     *obj,
     return;
 
   atk_object_notify_state_change (atk_obj, state, value);
+  if (state == ATK_STATE_SENSITIVE)
+    atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, value);
+
 }
 
 static void